/**
 * kl yy-ds @2021
 */
package com.cxps.server.common.service;

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.cxps.cloud.utils.UploadAndDownloadUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.util.Map;

/**
 * 文件逻辑层
 *
 * @author YouCai.Liu
 * @since 2021/10/21
 * ...
 */
@Service
public class FileService {

    @Value("${cxps.yyds.upload}")
    private String uploadPath;

    /**
     * 文件上传
     *
     * @param file
     * @return
     */
    public Map<String, Object> upload(MultipartFile file) throws IOException {
        return UploadAndDownloadUtils.upload(file, uploadPath);
    }

    /**
     * 文件下载
     *
     * @param fileName 服务器文件名
     * @param response 响应
     */
    public void download(String fileName, HttpServletResponse response) {
        UploadAndDownloadUtils.download(uploadPath + fileName, fileName, response);
    }

    /**
     * 将文件上传的OSS
     *
     * @param file
     * @return
     */
    public Map<String, Object> uploadOss(MultipartFile file) throws IOException {
        // yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1（杭州）为例，Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
        String endpoint = "yourEndpoint";

        // 阿里云账号AccessKey拥有所有API的访问权限，风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维，请登录RAM控制台创建RAM用户。
        String accessKeyId = "yourAccessKeyId";
        String accessKeySecret = "yourAccessKeySecret";

        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

        // 填写本地文件的完整路径。如果未指定本地路径，则默认从示例程序所属项目对应本地路径中上传文件流。
        InputStream inputStream = file.getInputStream();

        // 依次填写Bucket名称（例如examplebucket）和Object完整路径（例如exampledir/exampleobject.txt）。Object完整路径中不能包含Bucket名称。
        ossClient.putObject("examplebucket", "exampledir/exampleobject.txt", inputStream);

        // 关闭OSSClient。
        ossClient.shutdown();
        return null;
    }
}
